package src.ui;

import java.awt.Dimension;
import java.awt.Graphics;
import java.io.File;
import javax.swing.JInternalFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.InternalFrameListener;

/**
 * Esta clase representa los documentos de texto. Se utiliza en el desarrollo de
 * la aplicaci�n correspondiente al Trabajo Pr�ctico N� 1 de Dise�o e
 * Implementaci�n de Estructuras de Datos. Universidad Tecnol�gica Nacional -
 * Facultad Regional Santa Fe.
 * 
 * @author C�tedra DIED 2008.
 */
public class DocumentoDeTexto extends JInternalFrame implements
		InternalFrameListener {
	private static final long serialVersionUID = -7565056578582724727L;
	private JTextArea areaDeTexto;
	private FusorMain padre;
	private int id;
	private JScrollPane scrollPane;

	/**
	 * Constructor.
	 * 
	 * @param entrada
	 *            Archivo de imagen.
	 * @param padre
	 *            Ventana a la cual pertenece.
	 */
	public DocumentoDeTexto(File entrada, FusorMain padre) {
		super(entrada.getName(), true, // resizable
				true, // closable
				true, // maximizable
				true); // iconifiable

		this.padre = padre;

		this.addInternalFrameListener(this);

		this.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);

		this.inicializar("");
	}

	/**
	 * Constructor del documento de texto.
	 * 
	 * @param nombre
	 *            Nombre del documento.
	 * @param padre
	 *            Ventana a la cual pertenece.
	 */
	public DocumentoDeTexto(String nombre, FusorMain padre) {

		super(nombre, true, // resizable
				true, // closable
				true, // maximizable
				true); // iconifiable

		this.padre = padre;

		this.addInternalFrameListener(this);

		this.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);

		this.inicializar("");
	}

	/**
	 * Inicializador de la ventana.
	 * 
	 * @param imagenDeEntrada
	 *            Imagen que contendr la ventana.
	 */
	private void inicializar(String texto) {

		// Se hace visible el Frame
		this.setVisible(true);
		this.setSize(200, 200);
		this.setPreferredSize(new Dimension(200, 200));
		this.areaDeTexto = new JTextArea();
		this.areaDeTexto.setText(texto);

		scrollPane = new JScrollPane();
		scrollPane.getViewport().add(areaDeTexto);
		this.getContentPane().add(scrollPane);

		this.addInternalFrameListener(this);

	}

	/**
	 * Constructor.
	 * 
	 * @param textoDeEntrada
	 *            Texto que contiene la ventana.
	 * @param titulo
	 *            T�tulo de la ventana.
	 * @param padre
	 *            Ventana a la cual pertenece.
	 */
	public DocumentoDeTexto(String textoDeEntrada, String titulo,
			FusorMain padre) {

		super(titulo, true, // resizable
				true, // closable
				true, // maximizable
				true); // iconifiable

		this.padre = padre;
		this.addInternalFrameListener(this);

		this.inicializar(textoDeEntrada);

		this.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);

		if (textoDeEntrada == null)
			textoDeEntrada = "";

		this.inicializar(textoDeEntrada);
	}

	public void paint(Graphics g) {
		super.paint(g);
	}

	public FusorMain getPadre() {
		return padre;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public void setTexto(String texto) {
		this.areaDeTexto.setText(texto);
	}

	public String getTexto() {
		if (this.areaDeTexto == null)
			return "";
		return this.areaDeTexto.getText();
	}
	
	/**
	 * Evento que se dispara cuando se selecciona una ventana.
	 */
	public void internalFrameActivated(InternalFrameEvent arg0)
	{
		if (!(arg0.getInternalFrame() instanceof DocumentoDeTexto)) return;
		this.padre.setIdSeleccionado(((DocumentoDeTexto)arg0.getInternalFrame()).getId());
	}

	@Override
	public void internalFrameClosed(InternalFrameEvent e) {
		
	}

	@Override
	public void internalFrameClosing(InternalFrameEvent e) {
		this.padre.removeDocument(this);

	}

	@Override
	public void internalFrameDeactivated(InternalFrameEvent e) {
		
	}

	@Override
	public void internalFrameDeiconified(InternalFrameEvent e) {
		

	}

	@Override
	public void internalFrameIconified(InternalFrameEvent e) {
		

	}

	@Override
	public void internalFrameOpened(InternalFrameEvent e) {
		

	}

	public boolean equals(Object o) {
		if (!(o instanceof DocumentoDeTexto)) {
			return false;
		}
		return ((DocumentoDeTexto) o).getId() == this.getId();
	}
	
	public String toString(){
		Integer i = new Integer(id);
		return "Documento "+i+": \""+this.getTexto()+"\"";
	}

}
